import express from 'express';
import path from 'path';
import httpProxy from 'http-proxy';
import { SSR, Renderer } from '@fmfe/genesis-core';

/**
 * 创建一个应用程序
 */
export const app = express();

/**
 * 创建一个 SSR 实例
 */
export const ssr = new SSR({
    /**
     * 设置应用名称，不能重复
     */
    name: 'e-mes-main',
    /**
     * 设置编译的配置
     */
    build: {
        /**
         * 设置项目的目录
         */
        baseDir: path.resolve(path.dirname(__dirname))
    }
});

/**
 * 拿到渲染器后，启动应用程序
 */
export const startApp = (renderer: Renderer, port: number,ip:string) => {
    const proxy = httpProxy.createProxyServer({});

    /**
     * 注意：这里是为了演示，所以在聚合服务上代理了其它服务的请求，在生产环境中，你可能会使用 Nginx 进行反向代理。
     */

    // e-mes-share代理
    app.use('/e-mes-share/', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4010/e-mes-share',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });
    app.use('/api/e-mes-share', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4010/api/',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });

    // e-mes-home代理
    app.use('/e-mes-home/', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4020/e-mes-home/',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });
    app.use('/api/e-mes-home/', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4020/api/',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });

    // e-mes-about代理
    app.use('/e-mes-about/', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4030/e-mes-about',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });
    app.use('/api/e-mes-about/', (req, res, next) => {
        proxy.web(
            req,
            res,
            {
                target: 'http://'+ip+':4030/api/',
                changeOrigin: true
            },
            (err) => {
                res.status(500).send(err.message);
            }
        );
    });


    /**
     * 使用默认渲染中间件进行渲染，你也可以调用更加底层的 renderer.renderJson 和 renderer.renderHtml 来实现渲染
     */
    app.use(renderer.renderMiddleware);
    /**
     * 监听端口
     */
    app.listen(port, () => console.log(ssr.name + `:http://localhost:` + port));
};
